"""
A PyQT4 widget to display a popup image
"""

"""
Copyright 2012-2014  Anthony Beville

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""

import sys
from PyQt4 import QtCore, QtGui, uic
import os
from settings import ComicTaggerSettings


class ImagePopup(QtGui.QDialog):
	
	def __init__(self, parent, image_pixmap):
		super(ImagePopup, self).__init__(parent)
		
		uic.loadUi(ComicTaggerSettings.getUIFile('imagepopup.ui' ), self)

		QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))

		#self.setWindowModality(QtCore.Qt.WindowModal)
		self.setWindowFlags(QtCore.Qt.Popup)
		self.setWindowState(QtCore.Qt.WindowFullScreen)
	
		self.imagePixmap = image_pixmap
		
		screen_size = QtGui.QDesktopWidget().screenGeometry()
		self.resize(screen_size.width(), screen_size.height())
		self.move( 0, 0)
		
		# This is a total hack.  Uses a snapshot of the desktop, and overlays a
		# translucent screen over it.  Probably can do it better by setting opacity of a
		# widget
		self.desktopBg = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop ().winId(), 
			0,0, screen_size.width(), screen_size.height())
		bg = QtGui.QPixmap(ComicTaggerSettings.getGraphic('popup_bg.png')) 
		self.clientBgPixmap = bg.scaled(screen_size.width(), screen_size.height())		
		self.setMask(self.clientBgPixmap.mask())

		self.applyImagePixmap()
		self.showFullScreen()
		self.raise_(  )
		QtGui.QApplication.restoreOverrideCursor()		

	def paintEvent (self, event):
		self.painter = QtGui.QPainter(self)
		self.painter.setRenderHint(QtGui.QPainter.Antialiasing)
		self.painter.drawPixmap(0, 0, self.desktopBg)
		self.painter.drawPixmap(0, 0, self.clientBgPixmap)
		self.painter.end()		

	def applyImagePixmap( self ):
		win_h = self.height()
		win_w = self.width() 
	
		if self.imagePixmap.width() >  win_w or self.imagePixmap.height() > win_h:
			# scale the pixmap to fit in the frame
			display_pixmap = self.imagePixmap.scaled(win_w, win_h, QtCore.Qt.KeepAspectRatio)			
			self.lblImage.setPixmap( display_pixmap )
		else:
			display_pixmap = self.imagePixmap
		self.lblImage.setPixmap( display_pixmap )
			
		# move and resize the label to be centered in the fame
		img_w = display_pixmap.width()
		img_h = display_pixmap.height()
		self.lblImage.resize( img_w, img_h )
		self.lblImage.move( (win_w - img_w)/2, (win_h - img_h)/2 )

	def	mousePressEvent( self , event):
		self.close()
